import com.alibaba.fastjson.JSON;
import com.qf.test.pojo.User;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;

import java.util.Date;

/**
 * 已json格式字符串到redis服务器存取数据
 */
public class Demo3 {
    /**
     * 存入redis中json格式字符串
     */
    @Test
    public void testJsonSet() {
        //1.连接redis
        Jedis jedis = new Jedis("192.168.200.129", 6379);
        //2.准备json格式字符串类型的value数据
        User user = new User(1, "白虎", new Date());
        String value = JSON.toJSONString(user);
        //3.使用set方法存入redis
        jedis.set("userJson",value);
        //4.关闭资源
        jedis.close();
    }
    /**
     * 获取redis中json格式字符串
     */
    @Test
    public void testJsonGet() {
        //1.连接redis
        Jedis jedis = new Jedis("192.168.200.129",6379);
        //2.从redis中获取json 格式字符串
        String str = jedis.get("userJson");
        //3.将json格式字符串转换为java对象
        User user = JSON.parseObject(str, User.class);
        System.out.println("user:"+user);
        //4.关闭资源
        jedis.close();
    }


    @Test
    public void testPool() {
        //1.创建连接池配置对象信息
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();
        // 最大连接数
        config.setMaxTotal(50);
        //最大空闲数
        config.setMaxIdle(10);
        //最小空闲数
        config.setMinIdle(5);
        //超过时间，也就是多久没有用的连接 连接实现
        config.setMaxWaitMillis(3000);
        //2.创建连接池
        JedisPool jedisPool = new JedisPool(config, "192.168.200.129", 6379);
        //3.通过连接池获取jedis对象
        Jedis jedis = jedisPool.getResource();
        //4.获取redis中的数据
        String key1 = jedis.get("key1");
        System.out.println("key"+key1);
        //5.释放资源
        jedis.close();

    }

    /**
     * 测试管道命令效率
     */

    @Test
    public void name() {
        //1.创建连接池
        JedisPool pool = new JedisPool("192.168.200.129", 6379);
        //开始时间
        long current = System.currentTimeMillis();
        //2.获取一个连接 一个jedis对象
//        Jedis jedis = pool.getResource();
//        //3.执行命令
//        for (int i = 0; i <10000 ; i++) {
//            jedis.incr("key1");
//        }
//        //4.释放资源
//        jedis.close();
        //2.获取jedis对象
        Jedis jedis = pool.getResource();
        //3.创建管道
        Pipeline pipelined = jedis.pipelined();
        //4.将需要执行的命令放在管道当中
        for (int i = 0; i < 10000; i++) {
            pipelined.incr("key1");
        }
        //5.统一执行命令
        pipelined.syncAndReturnAll();
            //6.释放资源
        jedis.close();
        //结束时间-开始时间  打印了一共多少毫秒
        System.out.println(System.currentTimeMillis()-current);
    }



}
